package com.codemonkey.lq.common.util;

public class DebugUtil {
	/**
	 * 打印出执行到此处时的调用堆栈，对于调试非常有用;;
	 */
	public static void printStackTrace() {
		// 参考druid中的 Utils.toString(StackTraceElement[] stackTrace)

		// 输出顺序如下:
		//   1. 调用者     上
		//   2. 被调用者   下
		
		Throwable ex = new Throwable();
		StackTraceElement[] stackElements = ex.getStackTrace();
		if (stackElements != null) {
			for (int i = stackElements.length - 1; i >= 0; i--) {
				System.out.print(stackElements[i].getClassName() + "\t");
				System.out.print(stackElements[i].getMethodName() + "\t");
				System.out.print(stackElements[i].getFileName() + "\t");
				System.out.println(stackElements[i].getLineNumber());
			}
		}
	}

	public static void printStackTrace2() {
		// 参考druid中的 Utils.toString(StackTraceElement[] stackTrace)

		StackTraceElement stackElements[] = Thread.currentThread().getStackTrace();
		if (stackElements != null) {
			for (int i = stackElements.length - 1; i >= 0; i--) {
				System.out.print(stackElements[i].getClassName() + "\t");
				System.out.print(stackElements[i].getMethodName() + "\t");
				System.out.print(stackElements[i].getFileName() + "\t");
				System.out.println(stackElements[i].getLineNumber());
			}
		}
	}
}
